package com.example.exceldemo.service;

import com.example.exceldemo.model.ReqInfoDTO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface DocGeneratorService {
    
    /**
     * 处理Excel文件，读取需求信息
     * @param filePath Excel文件路径
     * @return 需求信息列表
     */
    List<ReqInfoDTO> processExcel(String filePath);
    
    /**
     * 直接处理上传的Excel文件，无需保存到硬盘
     * @param file 上传的Excel文件
     * @return 需求信息列表
     */
    List<ReqInfoDTO> processExcelFromMemory(MultipartFile file);
    
    /**
     * 根据需求信息生成文档
     * @param filePath Excel文件路径
     * @param selectedReqs 选定的需求编号列表，如果为null则处理所有需求
     * @return 生成文档的输出目录
     */
    String generateDocuments(String filePath, List<String> selectedReqs);
    
    /**
     * 异步生成文档
     * @param filePath Excel文件路径
     * @param selectedReqs 选定的需求编号列表，如果为null则处理所有需求
     * @param metadata 元数据，用于描述任务
     * @return 任务ID
     */
    String generateDocumentsAsync(String filePath, List<String> selectedReqs, String metadata);
    
    /**
     * 从已解析的需求列表生成文档
     * @param reqInfoList 需求信息列表
     * @param selectedReqs 选定的需求编号列表，如果为null则处理所有需求
     * @return 生成文档的输出目录
     */
    String generateDocumentsFromList(List<ReqInfoDTO> reqInfoList, List<String> selectedReqs);
    
    /**
     * 获取应用设置
     * @return 设置参数
     */
    Map<String, String> getSettings();
    
    /**
     * 保存应用设置
     * @param settings 设置参数
     */
    void saveSettings(Map<String, String> settings);
    
    /**
     * 异步生成文档（从需求列表而非文件）
     * @param reqInfoList 需求信息列表
     * @param selectedReqs 选定的需求编号列表，如果为null则处理所有需求
     * @param metadata 元数据，用于描述任务
     * @return 任务ID
     */
    String generateDocumentsAsync(List<ReqInfoDTO> reqInfoList, List<String> selectedReqs, String metadata);
} 